<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Caffe: caffe::BaseConvolutionLayer&lt; Dtype &gt; Class Template Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td id="projectalign" style="padding-left: 0.5em;">
   <div id="projectname">Caffe
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespacecaffe.html">caffe</a></li><li class="navelem"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">BaseConvolutionLayer</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="classcaffe_1_1BaseConvolutionLayer-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">caffe::BaseConvolutionLayer&lt; Dtype &gt; Class Template Reference<span class="mlabels"><span class="mlabel">abstract</span></span></div>  </div>
</div><!--header-->
<div class="contents">

<p>Abstract base class that factors out the BLAS code common to <a class="el" href="classcaffe_1_1ConvolutionLayer.html" title="Convolves the input image with a bank of learned filters, and (optionally) adds biases. ">ConvolutionLayer</a> and <a class="el" href="classcaffe_1_1DeconvolutionLayer.html" title="Convolve the input with a bank of learned filters, and (optionally) add biases, treating filters and ...">DeconvolutionLayer</a>.  
 <a href="classcaffe_1_1BaseConvolutionLayer.html#details">More...</a></p>

<p><code>#include &lt;<a class="el" href="base__conv__layer_8hpp_source.html">base_conv_layer.hpp</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for caffe::BaseConvolutionLayer&lt; Dtype &gt;:</div>
<div class="dyncontent">
 <div class="center">
  <img src="classcaffe_1_1BaseConvolutionLayer.png" usemap="#caffe::BaseConvolutionLayer_3C_20Dtype_20_3E_map" alt=""/>
  <map id="caffe::BaseConvolutionLayer_3C_20Dtype_20_3E_map" name="caffe::BaseConvolutionLayer_3C_20Dtype_20_3E_map">
<area href="classcaffe_1_1Layer.html" title="An interface for the units of computation which can be composed into a Net. " alt="caffe::Layer&lt; Dtype &gt;" shape="rect" coords="121,0,353,24"/>
<area href="classcaffe_1_1ConvolutionLayer.html" title="Convolves the input image with a bank of learned filters, and (optionally) adds biases. " alt="caffe::ConvolutionLayer&lt; Dtype &gt;" shape="rect" coords="0,112,232,136"/>
<area href="classcaffe_1_1DeconvolutionLayer.html" title="Convolve the input with a bank of learned filters, and (optionally) add biases, treating filters and ..." alt="caffe::DeconvolutionLayer&lt; Dtype &gt;" shape="rect" coords="242,112,474,136"/>
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a42f9ea86a8ede098bda11f582a31ffc1"><td class="memItemLeft" align="right" valign="top"><a id="a42f9ea86a8ede098bda11f582a31ffc1"></a>
&#160;</td><td class="memItemRight" valign="bottom"><b>BaseConvolutionLayer</b> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a42f9ea86a8ede098bda11f582a31ffc1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a422e1ef9e6c8b4574f7677bb125e234a"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a422e1ef9e6c8b4574f7677bb125e234a">LayerSetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a422e1ef9e6c8b4574f7677bb125e234a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Does layer-specific setup: your layer should implement this function as well as Reshape.  <a href="#a422e1ef9e6c8b4574f7677bb125e234a">More...</a><br /></td></tr>
<tr class="separator:a422e1ef9e6c8b4574f7677bb125e234a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa215338f200c832081f2719a54bc5256"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#aa215338f200c832081f2719a54bc5256">Reshape</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:aa215338f200c832081f2719a54bc5256"><td class="mdescLeft">&#160;</td><td class="mdescRight">Adjust the shapes of top blobs and internal buffers to accommodate the shapes of the bottom blobs.  <a href="#aa215338f200c832081f2719a54bc5256">More...</a><br /></td></tr>
<tr class="separator:aa215338f200c832081f2719a54bc5256"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa3d861ed15f6e41c6257d6a10defa7eb"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#aa3d861ed15f6e41c6257d6a10defa7eb">MinBottomBlobs</a> () const</td></tr>
<tr class="memdesc:aa3d861ed15f6e41c6257d6a10defa7eb"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of bottom blobs required by the layer, or -1 if no minimum number is required.  <a href="#aa3d861ed15f6e41c6257d6a10defa7eb">More...</a><br /></td></tr>
<tr class="separator:aa3d861ed15f6e41c6257d6a10defa7eb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae4092cf1b48e18e5d82cd714ae6e8547"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#ae4092cf1b48e18e5d82cd714ae6e8547">MinTopBlobs</a> () const</td></tr>
<tr class="memdesc:ae4092cf1b48e18e5d82cd714ae6e8547"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the minimum number of top blobs required by the layer, or -1 if no minimum number is required.  <a href="#ae4092cf1b48e18e5d82cd714ae6e8547">More...</a><br /></td></tr>
<tr class="separator:ae4092cf1b48e18e5d82cd714ae6e8547"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad8e839460bf52abe3df2008b99a1810d"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#ad8e839460bf52abe3df2008b99a1810d">EqualNumBottomTopBlobs</a> () const</td></tr>
<tr class="memdesc:ad8e839460bf52abe3df2008b99a1810d"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns true if the layer requires an equal number of bottom and top blobs.  <a href="#ad8e839460bf52abe3df2008b99a1810d">More...</a><br /></td></tr>
<tr class="separator:ad8e839460bf52abe3df2008b99a1810d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pub_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pub_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Public Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7b4e4ccea08c7b8b15acc6829d5735f6">Layer</a> (const LayerParameter &amp;param)</td></tr>
<tr class="separator:a7b4e4ccea08c7b8b15acc6829d5735f6 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">SetUp</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Implements common layer setup functionality.  <a href="classcaffe_1_1Layer.html#a18d6bfdb535ab8e96a971dec4ae39a84">More...</a><br /></td></tr>
<tr class="separator:a18d6bfdb535ab8e96a971dec4ae39a84 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">Forward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the bottom blobs, compute the top blobs and the loss.  <a href="classcaffe_1_1Layer.html#ab57d272dabe8c709d2a785eebe72ca57">More...</a><br /></td></tr>
<tr class="separator:ab57d272dabe8c709d2a785eebe72ca57 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">Backward</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Given the top blob error gradients, compute the bottom blob error gradients.  <a href="classcaffe_1_1Layer.html#a183d343f5183a4762307f2c5e6ed1e12">More...</a><br /></td></tr>
<tr class="separator:a183d343f5183a4762307f2c5e6ed1e12 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="aaf4524ce8641a30a8a4784aee1b2b4c8"></a>
vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt; &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#aaf4524ce8641a30a8a4784aee1b2b4c8">blobs</a> ()</td></tr>
<tr class="memdesc:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the vector of learnable parameter blobs. <br /></td></tr>
<tr class="separator:aaf4524ce8641a30a8a4784aee1b2b4c8 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="adff82274f146e2b6922d0ebac2aaf215"></a>
const LayerParameter &amp;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#adff82274f146e2b6922d0ebac2aaf215">layer_param</a> () const</td></tr>
<tr class="memdesc:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer parameter. <br /></td></tr>
<tr class="separator:adff82274f146e2b6922d0ebac2aaf215 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a4a1754828dda22cc8daa2f63377f3579"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a4a1754828dda22cc8daa2f63377f3579">ToProto</a> (LayerParameter *param, bool write_diff=false)</td></tr>
<tr class="memdesc:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Writes the layer parameter to a protocol buffer. <br /></td></tr>
<tr class="separator:a4a1754828dda22cc8daa2f63377f3579 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899410336f30821644c8bd6c69a070c9"></a>
Dtype&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899410336f30821644c8bd6c69a070c9">loss</a> (const int top_index) const</td></tr>
<tr class="memdesc:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the scalar loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899410336f30821644c8bd6c69a070c9 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a899b09f4b91ada8545b3a43ee91e0d69"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a899b09f4b91ada8545b3a43ee91e0d69">set_loss</a> (const int top_index, const Dtype value)</td></tr>
<tr class="memdesc:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the loss associated with a top blob at a given index. <br /></td></tr>
<tr class="separator:a899b09f4b91ada8545b3a43ee91e0d69 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8952bff6bc4c2a96d8ea30d8ff65b198 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a8952bff6bc4c2a96d8ea30d8ff65b198"></a>
virtual const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8952bff6bc4c2a96d8ea30d8ff65b198">type</a> () const</td></tr>
<tr class="memdesc:a8952bff6bc4c2a96d8ea30d8ff65b198 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the layer type. <br /></td></tr>
<tr class="separator:a8952bff6bc4c2a96d8ea30d8ff65b198 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">ExactNumBottomBlobs</a> () const</td></tr>
<tr class="memdesc:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of bottom blobs required by the layer, or -1 if no exact number is required.  <a href="classcaffe_1_1Layer.html#a8e5ee0494d85f5f55fc4396537cbc60f">More...</a><br /></td></tr>
<tr class="separator:a8e5ee0494d85f5f55fc4396537cbc60f inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af8bdc989053e0363ab032026b46de7c3 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af8bdc989053e0363ab032026b46de7c3">MaxBottomBlobs</a> () const</td></tr>
<tr class="memdesc:af8bdc989053e0363ab032026b46de7c3 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of bottom blobs required by the layer, or -1 if no maximum number is required.  <a href="classcaffe_1_1Layer.html#af8bdc989053e0363ab032026b46de7c3">More...</a><br /></td></tr>
<tr class="separator:af8bdc989053e0363ab032026b46de7c3 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a64e2ca72c719e4b2f1f9216ccfb0d37f inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a64e2ca72c719e4b2f1f9216ccfb0d37f">ExactNumTopBlobs</a> () const</td></tr>
<tr class="memdesc:a64e2ca72c719e4b2f1f9216ccfb0d37f inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the exact number of top blobs required by the layer, or -1 if no exact number is required.  <a href="classcaffe_1_1Layer.html#a64e2ca72c719e4b2f1f9216ccfb0d37f">More...</a><br /></td></tr>
<tr class="separator:a64e2ca72c719e4b2f1f9216ccfb0d37f inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">MaxTopBlobs</a> () const</td></tr>
<tr class="memdesc:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the maximum number of top blobs required by the layer, or -1 if no maximum number is required.  <a href="classcaffe_1_1Layer.html#ac6c03df0b6e40e776c94001e19994a2e">More...</a><br /></td></tr>
<tr class="separator:ac6c03df0b6e40e776c94001e19994a2e inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">AutoTopBlobs</a> () const</td></tr>
<tr class="memdesc:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether "anonymous" top blobs are created automatically by the layer.  <a href="classcaffe_1_1Layer.html#a50130669e230a168d1f8fbbb8171f054">More...</a><br /></td></tr>
<tr class="separator:a50130669e230a168d1f8fbbb8171f054 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1c0b2bffcd6d57e4bd49f820941badb6 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1c0b2bffcd6d57e4bd49f820941badb6">AllowForceBackward</a> (const int bottom_index) const</td></tr>
<tr class="memdesc:a1c0b2bffcd6d57e4bd49f820941badb6 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Return whether to allow force_backward for a given bottom blob index.  <a href="classcaffe_1_1Layer.html#a1c0b2bffcd6d57e4bd49f820941badb6">More...</a><br /></td></tr>
<tr class="separator:a1c0b2bffcd6d57e4bd49f820941badb6 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">param_propagate_down</a> (const int param_id)</td></tr>
<tr class="memdesc:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specifies whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id.  <a href="classcaffe_1_1Layer.html#a1a3708013b0231e71d725252e10ce6e3">More...</a><br /></td></tr>
<tr class="separator:a1a3708013b0231e71d725252e10ce6e3 inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a9a6fcb843803ed556f0a69cc2864379b"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a9a6fcb843803ed556f0a69cc2864379b">set_param_propagate_down</a> (const int param_id, const bool value)</td></tr>
<tr class="memdesc:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets whether the layer should compute gradients w.r.t. a parameter at a particular index given by param_id. <br /></td></tr>
<tr class="separator:a9a6fcb843803ed556f0a69cc2864379b inherit pub_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a2870d22074426089e31afd864b989743"><td class="memItemLeft" align="right" valign="top"><a id="a2870d22074426089e31afd864b989743"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>forward_cpu_gemm</b> (const Dtype *input, const Dtype *weights, Dtype *output, bool skip_im2col=false)</td></tr>
<tr class="separator:a2870d22074426089e31afd864b989743"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a00ede6bbe48c3a6dedd21308a48f979f"><td class="memItemLeft" align="right" valign="top"><a id="a00ede6bbe48c3a6dedd21308a48f979f"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>forward_cpu_bias</b> (Dtype *output, const Dtype *bias)</td></tr>
<tr class="separator:a00ede6bbe48c3a6dedd21308a48f979f"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3006035856c7f49371fe2b93ed38c935"><td class="memItemLeft" align="right" valign="top"><a id="a3006035856c7f49371fe2b93ed38c935"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>backward_cpu_gemm</b> (const Dtype *input, const Dtype *weights, Dtype *output)</td></tr>
<tr class="separator:a3006035856c7f49371fe2b93ed38c935"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aa0ce44e831ad98176dc8c06f2069df2e"><td class="memItemLeft" align="right" valign="top"><a id="aa0ce44e831ad98176dc8c06f2069df2e"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>weight_cpu_gemm</b> (const Dtype *input, const Dtype *output, Dtype *weights)</td></tr>
<tr class="separator:aa0ce44e831ad98176dc8c06f2069df2e"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a840ea8c0a485047a9760b7194b68db0c"><td class="memItemLeft" align="right" valign="top"><a id="a840ea8c0a485047a9760b7194b68db0c"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>backward_cpu_bias</b> (Dtype *bias, const Dtype *input)</td></tr>
<tr class="separator:a840ea8c0a485047a9760b7194b68db0c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ace6f5e890e06e4812cf10e841f279346"><td class="memItemLeft" align="right" valign="top"><a id="ace6f5e890e06e4812cf10e841f279346"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>forward_gpu_gemm</b> (const Dtype *col_input, const Dtype *weights, Dtype *output, bool skip_im2col=false)</td></tr>
<tr class="separator:ace6f5e890e06e4812cf10e841f279346"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2a1f9d98d332411a481d82c10d76b474"><td class="memItemLeft" align="right" valign="top"><a id="a2a1f9d98d332411a481d82c10d76b474"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>forward_gpu_bias</b> (Dtype *output, const Dtype *bias)</td></tr>
<tr class="separator:a2a1f9d98d332411a481d82c10d76b474"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:aece62d609b5fb36990ef6d5c48472efe"><td class="memItemLeft" align="right" valign="top"><a id="aece62d609b5fb36990ef6d5c48472efe"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>backward_gpu_gemm</b> (const Dtype *input, const Dtype *weights, Dtype *col_output)</td></tr>
<tr class="separator:aece62d609b5fb36990ef6d5c48472efe"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2c2e76ae5046570087f6af56180787b5"><td class="memItemLeft" align="right" valign="top"><a id="a2c2e76ae5046570087f6af56180787b5"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>weight_gpu_gemm</b> (const Dtype *col_input, const Dtype *output, Dtype *weights)</td></tr>
<tr class="separator:a2c2e76ae5046570087f6af56180787b5"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abbaf526a70e5106b79d8da94e8d4aa06"><td class="memItemLeft" align="right" valign="top"><a id="abbaf526a70e5106b79d8da94e8d4aa06"></a>
void&#160;</td><td class="memItemRight" valign="bottom"><b>backward_gpu_bias</b> (Dtype *bias, const Dtype *input)</td></tr>
<tr class="separator:abbaf526a70e5106b79d8da94e8d4aa06"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6324d4ab918a7b09399aa85a8a03737d"><td class="memItemLeft" align="right" valign="top"><a id="a6324d4ab918a7b09399aa85a8a03737d"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a6324d4ab918a7b09399aa85a8a03737d">input_shape</a> (int i)</td></tr>
<tr class="memdesc:a6324d4ab918a7b09399aa85a8a03737d"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the input. <br /></td></tr>
<tr class="separator:a6324d4ab918a7b09399aa85a8a03737d"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:affa7a2b5b583afc210f0c5dfe48842c8"><td class="memItemLeft" align="right" valign="top"><a id="affa7a2b5b583afc210f0c5dfe48842c8"></a>
virtual bool&#160;</td><td class="memItemRight" valign="bottom"><b>reverse_dimensions</b> ()=0</td></tr>
<tr class="separator:affa7a2b5b583afc210f0c5dfe48842c8"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a552f16d43bf2470274102fe4fcde8759"><td class="memItemLeft" align="right" valign="top"><a id="a552f16d43bf2470274102fe4fcde8759"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><b>compute_output_shape</b> ()=0</td></tr>
<tr class="separator:a552f16d43bf2470274102fe4fcde8759"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_methods_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_methods_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Member Functions inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a576ac6a60b1e99fe383831f52a6cea77 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a576ac6a60b1e99fe383831f52a6cea77"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a576ac6a60b1e99fe383831f52a6cea77">Forward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)=0</td></tr>
<tr class="memdesc:a576ac6a60b1e99fe383831f52a6cea77 inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the CPU device, compute the layer output. <br /></td></tr>
<tr class="separator:a576ac6a60b1e99fe383831f52a6cea77 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3a88d8fb290877b4c7eb37daa3499de inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="af3a88d8fb290877b4c7eb37daa3499de"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af3a88d8fb290877b4c7eb37daa3499de">Forward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="memdesc:af3a88d8fb290877b4c7eb37daa3499de inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the layer output. Fall back to <a class="el" href="classcaffe_1_1Layer.html#a576ac6a60b1e99fe383831f52a6cea77" title="Using the CPU device, compute the layer output. ">Forward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:af3a88d8fb290877b4c7eb37daa3499de inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a75c9b2a321dc713e0eaef530d02dc37f inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a75c9b2a321dc713e0eaef530d02dc37f"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a75c9b2a321dc713e0eaef530d02dc37f">Backward_cpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)=0</td></tr>
<tr class="memdesc:a75c9b2a321dc713e0eaef530d02dc37f inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. <br /></td></tr>
<tr class="separator:a75c9b2a321dc713e0eaef530d02dc37f inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top"><a id="a6faee52af6250a38d1b879008257f5a7"></a>
virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a6faee52af6250a38d1b879008257f5a7">Backward_gpu</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top, const vector&lt; bool &gt; &amp;propagate_down, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom)</td></tr>
<tr class="memdesc:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="mdescLeft">&#160;</td><td class="mdescRight">Using the GPU device, compute the gradients for any parameters and for the bottom blobs if propagate_down is true. Fall back to <a class="el" href="classcaffe_1_1Layer.html#a75c9b2a321dc713e0eaef530d02dc37f" title="Using the CPU device, compute the gradients for any parameters and for the bottom blobs if propagate_...">Backward_cpu()</a> if unavailable. <br /></td></tr>
<tr class="separator:a6faee52af6250a38d1b879008257f5a7 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a55c8036130225fbc874a986bdf4b27e2">CheckBlobCounts</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;bottom, const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a55c8036130225fbc874a986bdf4b27e2 inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a04eb2a3d1d59c64cd64c233217d5d6fc">SetLossWeights</a> (const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;top)</td></tr>
<tr class="separator:a04eb2a3d1d59c64cd64c233217d5d6fc inherit pro_methods_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a0a2f112eec8a7cbd13888185d4fb36b0"><td class="memItemLeft" align="right" valign="top"><a id="a0a2f112eec8a7cbd13888185d4fb36b0"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a0a2f112eec8a7cbd13888185d4fb36b0">kernel_shape_</a></td></tr>
<tr class="memdesc:a0a2f112eec8a7cbd13888185d4fb36b0"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of a filter kernel. <br /></td></tr>
<tr class="separator:a0a2f112eec8a7cbd13888185d4fb36b0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af638d3d8e67c33443cb11cb000368e73"><td class="memItemLeft" align="right" valign="top"><a id="af638d3d8e67c33443cb11cb000368e73"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#af638d3d8e67c33443cb11cb000368e73">stride_</a></td></tr>
<tr class="memdesc:af638d3d8e67c33443cb11cb000368e73"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the stride. <br /></td></tr>
<tr class="separator:af638d3d8e67c33443cb11cb000368e73"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a897ead2823e9031863e2151e71229e35"><td class="memItemLeft" align="right" valign="top"><a id="a897ead2823e9031863e2151e71229e35"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a897ead2823e9031863e2151e71229e35">pad_</a></td></tr>
<tr class="memdesc:a897ead2823e9031863e2151e71229e35"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the padding. <br /></td></tr>
<tr class="separator:a897ead2823e9031863e2151e71229e35"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a91f929109b5c05ba6086d4c2a741ad4a"><td class="memItemLeft" align="right" valign="top"><a id="a91f929109b5c05ba6086d4c2a741ad4a"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a91f929109b5c05ba6086d4c2a741ad4a">dilation_</a></td></tr>
<tr class="memdesc:a91f929109b5c05ba6086d4c2a741ad4a"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the dilation. <br /></td></tr>
<tr class="separator:a91f929109b5c05ba6086d4c2a741ad4a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a63756d6ef00f6491939e539094c21397"><td class="memItemLeft" align="right" valign="top"><a id="a63756d6ef00f6491939e539094c21397"></a>
<a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a63756d6ef00f6491939e539094c21397">conv_input_shape_</a></td></tr>
<tr class="memdesc:a63756d6ef00f6491939e539094c21397"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the convolution input. <br /></td></tr>
<tr class="separator:a63756d6ef00f6491939e539094c21397"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a9dd3f4ea6e17fe155efe537c120a3de4"><td class="memItemLeft" align="right" valign="top"><a id="a9dd3f4ea6e17fe155efe537c120a3de4"></a>
vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#a9dd3f4ea6e17fe155efe537c120a3de4">col_buffer_shape_</a></td></tr>
<tr class="memdesc:a9dd3f4ea6e17fe155efe537c120a3de4"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the col_buffer. <br /></td></tr>
<tr class="separator:a9dd3f4ea6e17fe155efe537c120a3de4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af0892b61454ba086c4c74b78d910bf31"><td class="memItemLeft" align="right" valign="top"><a id="af0892b61454ba086c4c74b78d910bf31"></a>
vector&lt; int &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1BaseConvolutionLayer.html#af0892b61454ba086c4c74b78d910bf31">output_shape_</a></td></tr>
<tr class="memdesc:af0892b61454ba086c4c74b78d910bf31"><td class="mdescLeft">&#160;</td><td class="mdescRight">The spatial dimensions of the output. <br /></td></tr>
<tr class="separator:af0892b61454ba086c4c74b78d910bf31"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8a91469895adc7114eecee92bb4f81a1"><td class="memItemLeft" align="right" valign="top"><a id="a8a91469895adc7114eecee92bb4f81a1"></a>
const vector&lt; int &gt; *&#160;</td><td class="memItemRight" valign="bottom"><b>bottom_shape_</b></td></tr>
<tr class="separator:a8a91469895adc7114eecee92bb4f81a1"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8eac7ce95d86d01f026b649787a1920b"><td class="memItemLeft" align="right" valign="top"><a id="a8eac7ce95d86d01f026b649787a1920b"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>num_spatial_axes_</b></td></tr>
<tr class="separator:a8eac7ce95d86d01f026b649787a1920b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af5a73bde5834135df30eb2649bd510cb"><td class="memItemLeft" align="right" valign="top"><a id="af5a73bde5834135df30eb2649bd510cb"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>bottom_dim_</b></td></tr>
<tr class="separator:af5a73bde5834135df30eb2649bd510cb"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2221107608862f0a81a97f87363967ec"><td class="memItemLeft" align="right" valign="top"><a id="a2221107608862f0a81a97f87363967ec"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>top_dim_</b></td></tr>
<tr class="separator:a2221107608862f0a81a97f87363967ec"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a3f1ce7e7343b3c10a58913fc3728e6d2"><td class="memItemLeft" align="right" valign="top"><a id="a3f1ce7e7343b3c10a58913fc3728e6d2"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>channel_axis_</b></td></tr>
<tr class="separator:a3f1ce7e7343b3c10a58913fc3728e6d2"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a04e2625c95d319ff11bfb98ded1fe9e9"><td class="memItemLeft" align="right" valign="top"><a id="a04e2625c95d319ff11bfb98ded1fe9e9"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>num_</b></td></tr>
<tr class="separator:a04e2625c95d319ff11bfb98ded1fe9e9"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ab9f8d85682bd1bcded1bf4b87061f515"><td class="memItemLeft" align="right" valign="top"><a id="ab9f8d85682bd1bcded1bf4b87061f515"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>channels_</b></td></tr>
<tr class="separator:ab9f8d85682bd1bcded1bf4b87061f515"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ae05b3ec701c6b0277ba5689b88d8fc24"><td class="memItemLeft" align="right" valign="top"><a id="ae05b3ec701c6b0277ba5689b88d8fc24"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>group_</b></td></tr>
<tr class="separator:ae05b3ec701c6b0277ba5689b88d8fc24"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a215df1c90a686e075c8851cb7561d289"><td class="memItemLeft" align="right" valign="top"><a id="a215df1c90a686e075c8851cb7561d289"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>out_spatial_dim_</b></td></tr>
<tr class="separator:a215df1c90a686e075c8851cb7561d289"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af7b74e11196840561a451813a5aa4321"><td class="memItemLeft" align="right" valign="top"><a id="af7b74e11196840561a451813a5aa4321"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>weight_offset_</b></td></tr>
<tr class="separator:af7b74e11196840561a451813a5aa4321"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ac22f72160f6b4ee54d1139095d09d853"><td class="memItemLeft" align="right" valign="top"><a id="ac22f72160f6b4ee54d1139095d09d853"></a>
int&#160;</td><td class="memItemRight" valign="bottom"><b>num_output_</b></td></tr>
<tr class="separator:ac22f72160f6b4ee54d1139095d09d853"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af984e3e89a7b9d6d930ed93d29e06cb4"><td class="memItemLeft" align="right" valign="top"><a id="af984e3e89a7b9d6d930ed93d29e06cb4"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>bias_term_</b></td></tr>
<tr class="separator:af984e3e89a7b9d6d930ed93d29e06cb4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4c0e8ca309c48e535713e9532c0475ff"><td class="memItemLeft" align="right" valign="top"><a id="a4c0e8ca309c48e535713e9532c0475ff"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>is_1x1_</b></td></tr>
<tr class="separator:a4c0e8ca309c48e535713e9532c0475ff"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a4b572cb3c810f3beffaab4fb680c7823"><td class="memItemLeft" align="right" valign="top"><a id="a4b572cb3c810f3beffaab4fb680c7823"></a>
bool&#160;</td><td class="memItemRight" valign="bottom"><b>force_nd_im2col_</b></td></tr>
<tr class="separator:a4b572cb3c810f3beffaab4fb680c7823"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="inherit_header pro_attribs_classcaffe_1_1Layer"><td colspan="2" onclick="javascript:toggleInherit('pro_attribs_classcaffe_1_1Layer')"><img src="closed.png" alt="-"/>&#160;Protected Attributes inherited from <a class="el" href="classcaffe_1_1Layer.html">caffe::Layer&lt; Dtype &gt;</a></td></tr>
<tr class="memitem:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">LayerParameter&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a7ed12bb2df25c887e41d7ea9557fc701">layer_param_</a></td></tr>
<tr class="separator:a7ed12bb2df25c887e41d7ea9557fc701 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">Phase&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a1d04ad7f595a82a1c811f102d68b8a19">phase_</a></td></tr>
<tr class="separator:a1d04ad7f595a82a1c811f102d68b8a19 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; shared_ptr&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; &gt; &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#a8073fcf2c139b47eb99ce71b346b1321">blobs_</a></td></tr>
<tr class="separator:a8073fcf2c139b47eb99ce71b346b1321 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; bool &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#acd4a05def9ff3b42ad72404210613ef7">param_propagate_down_</a></td></tr>
<tr class="separator:acd4a05def9ff3b42ad72404210613ef7 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memItemLeft" align="right" valign="top">vector&lt; Dtype &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classcaffe_1_1Layer.html#af6d347229a139500994e7a926c680486">loss_</a></td></tr>
<tr class="separator:af6d347229a139500994e7a926c680486 inherit pro_attribs_classcaffe_1_1Layer"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><h3>template&lt;typename Dtype&gt;<br />
class caffe::BaseConvolutionLayer&lt; Dtype &gt;</h3>

<p>Abstract base class that factors out the BLAS code common to <a class="el" href="classcaffe_1_1ConvolutionLayer.html" title="Convolves the input image with a bank of learned filters, and (optionally) adds biases. ">ConvolutionLayer</a> and <a class="el" href="classcaffe_1_1DeconvolutionLayer.html" title="Convolve the input with a bank of learned filters, and (optionally) add biases, treating filters and ...">DeconvolutionLayer</a>. </p>
</div><h2 class="groupheader">Member Function Documentation</h2>
<a id="ad8e839460bf52abe3df2008b99a1810d"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ad8e839460bf52abe3df2008b99a1810d">&#9670;&nbsp;</a></span>EqualNumBottomTopBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool <a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">caffe::BaseConvolutionLayer</a>&lt; Dtype &gt;::EqualNumBottomTopBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns true if the layer requires an equal number of bottom and top blobs. </p>
<p>This method should be overridden to return true if your layer expects an equal number of bottom and top blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#af452a938bc7596f9b5e9900c8dc4ab3d">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="a422e1ef9e6c8b4574f7677bb125e234a"></a>
<h2 class="memtitle"><span class="permalink"><a href="#a422e1ef9e6c8b4574f7677bb125e234a">&#9670;&nbsp;</a></span>LayerSetUp()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">caffe::BaseConvolutionLayer</a>&lt; Dtype &gt;::LayerSetUp </td>
          <td>(</td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>top</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Does layer-specific setup: your layer should implement this function as well as Reshape. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">bottom</td><td>the preshaped input blobs, whose data fields store the input data for this layer </td></tr>
    <tr><td class="paramname">top</td><td>the allocated but unshaped output blobs</td></tr>
  </table>
  </dd>
</dl>
<p>This method should do one-time layer specific setup. This includes reading and processing relevent parameters from the <code>layer_param_</code>. Setting up the shapes of top blobs and internal buffers should be done in <code>Reshape</code>, which will be called before the forward pass to adjust the top blob sizes. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#a481323a3e0972c682787f2137468c29f">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="aa3d861ed15f6e41c6257d6a10defa7eb"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa3d861ed15f6e41c6257d6a10defa7eb">&#9670;&nbsp;</a></span>MinBottomBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int <a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">caffe::BaseConvolutionLayer</a>&lt; Dtype &gt;::MinBottomBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the minimum number of bottom blobs required by the layer, or -1 if no minimum number is required. </p>
<p>This method should be overridden to return a non-negative value if your layer expects some minimum number of bottom blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#aca3cb2bafaefda5d4760aaebd0b72def">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="ae4092cf1b48e18e5d82cd714ae6e8547"></a>
<h2 class="memtitle"><span class="permalink"><a href="#ae4092cf1b48e18e5d82cd714ae6e8547">&#9670;&nbsp;</a></span>MinTopBlobs()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual int <a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">caffe::BaseConvolutionLayer</a>&lt; Dtype &gt;::MinTopBlobs </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Returns the minimum number of top blobs required by the layer, or -1 if no minimum number is required. </p>
<p>This method should be overridden to return a non-negative value if your layer expects some minimum number of top blobs. </p>

<p>Reimplemented from <a class="el" href="classcaffe_1_1Layer.html#ab9e4c8d642e413948b131d851a8462a4">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<a id="aa215338f200c832081f2719a54bc5256"></a>
<h2 class="memtitle"><span class="permalink"><a href="#aa215338f200c832081f2719a54bc5256">&#9670;&nbsp;</a></span>Reshape()</h2>

<div class="memitem">
<div class="memproto">
<div class="memtemplate">
template&lt;typename Dtype &gt; </div>
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">void <a class="el" href="classcaffe_1_1BaseConvolutionLayer.html">caffe::BaseConvolutionLayer</a>&lt; Dtype &gt;::Reshape </td>
          <td>(</td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>bottom</em>, </td>
        </tr>
        <tr>
          <td class="paramkey"></td>
          <td></td>
          <td class="paramtype">const vector&lt; <a class="el" href="classcaffe_1_1Blob.html">Blob</a>&lt; Dtype &gt; *&gt; &amp;&#160;</td>
          <td class="paramname"><em>top</em>&#160;</td>
        </tr>
        <tr>
          <td></td>
          <td>)</td>
          <td></td><td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Adjust the shapes of top blobs and internal buffers to accommodate the shapes of the bottom blobs. </p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">bottom</td><td>the input blobs, with the requested input shapes </td></tr>
    <tr><td class="paramname">top</td><td>the top blobs, which should be reshaped as needed</td></tr>
  </table>
  </dd>
</dl>
<p>This method should reshape top blobs as needed according to the shapes of the bottom (input) blobs, as well as reshaping any internal buffers and making any other necessary adjustments so that the layer can accommodate the bottom blobs. </p>

<p>Implements <a class="el" href="classcaffe_1_1Layer.html#a7fe981e8af8d93d587acf2a952be563d">caffe::Layer&lt; Dtype &gt;</a>.</p>

</div>
</div>
<hr/>The documentation for this class was generated from the following files:<ul>
<li>include/caffe/layers/<a class="el" href="base__conv__layer_8hpp_source.html">base_conv_layer.hpp</a></li>
<li>src/caffe/layers/base_conv_layer.cpp</li>
</ul>
</div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated on Thu Aug 3 2017 23:11:21 for Caffe by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.13
</small></address>
</body>
</html>
